/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wiimote;

import tools.CourseVoituresException;
import coursevoitures.Ctrl;

import wiiusej.*;
import java.util.Vector;

/**
 * Classe permettant de connecter des Wiimotes.
 * @author Aurelien
 */
public class Wiimote_Connecteur {

    private Wiimote_Controleur wiimoteCtrl;
    private Ctrl ctrl;
    private Vector listeWiimote;

    /**
     * Constructeur de la classe, il permet de memoriser la reference du Ctrl de l'application.
     * @param c le Ctrl de l'application.
     */
    public Wiimote_Connecteur(Ctrl c) {
        ctrl = c;
        listeWiimote = new Vector();
    }

    /**
     * Methode permettant de connecter une Wiimote.
     * @return la Wiimote detectee.
     * @throws CourseVoituresException (AUCUNE_WIIMOTE ou AUCUNE_NOUVELLE_WIIMOTE)
     */
    public Wiimote[] connecter_wiimote() throws CourseVoituresException        {
        Wiimote[] wiimotesDetectees = WiiUseApiManager.getWiimotes(7, true);
        Wiimote[] wiimotes;
        boolean flag = false;

        //System.out.println("Dans Wiimote_Connecteur.connecter_wiimote - wiimotes.length : "+wiimotesDetectees.length);

        if (wiimotesDetectees.length > 0) {
            wiimotes = new Wiimote[wiimotesDetectees.length];

            for (int i = 0; i < wiimotesDetectees.length; i++) {

                if(wiimotesDetectees[i] != null){
                    
                    /* ajout de la wiimote si elle n'a pas deja ete detectee */
                    if (!listeWiimote.contains(wiimotesDetectees[i])) {
                       
                        wiimoteCtrl = new Wiimote_Controleur(ctrl);
                        wiimoteCtrl.start();

                        wiimotesDetectees[i].addWiiMoteEventListeners(wiimoteCtrl);

                        wiimotes[i] = wiimotesDetectees[i];
                        flag = true;
                    }
                }
                else{
                    //System.out.println("Dans Wiimote_Connecteur.connecter_wiimote - wiimotesDetectees["+i+"] : "+wiimotesDetectees[i]);
                }
            }

            if (flag) return wiimotes;
            else throw new CourseVoituresException("Aucune nouvelle Wiimote a proximite", CourseVoituresException.AUCUNE_NOUVELLE_WIIMOTE);
        } else {
            throw new CourseVoituresException("Aucune Wiimote a proximite", CourseVoituresException.AUCUNE_WIIMOTE);
        }
    }

    /**
     * Methode permettant d'ajouter une Wiimote a la liste des Wiimotes connectees.
     * @param w la Wiimote a ajouter.
     */
    public void ajouter_Wiimote(Wiimote w) {
        listeWiimote.add(w);
    }

    public void enlever_wiimote(Wiimote w){
       listeWiimote.remove(w);
    }

    /**
     * Methode permettant de chercher une Wiimote dans la liste des Wiimotes connectees en fonction de son identifiant.
     * @param id l'identifiant de la Wiimote a chercher.
     * @return la Wiimote correspondant a l'identifiant ou null en cas d'echec.
     */
    public Wiimote chercher_Wiimote_Par_Id(int id) {
        Wiimote res = null;

        for (int i = 0; i < listeWiimote.size(); i++) {
            res = (Wiimote) listeWiimote.get(i);
            if (res.getId() == id) {
                break;
            }
        }

        return res;
    }
}
